package kruispunt;

public class Zijde {
	
	public enum Banen {vLinks,aLinks,aVoor,aRechts,fLiVo,fRechts,vRechts};
	Baan vLinks,vRechts, fLiVo, fRechts;
	RijBaan aLinks,aVoor,aRechts;
	private int prioriteit; 	// Dit kan voorkeur geven aan bepaalde richtingen,
								    // Zoals in de opdracht de noord-zuid
	
	public Zijde (int startID, int prioriteit) { // Maakt de zijden aan met hun baanID 
		this.prioriteit = prioriteit;
		vLinks = new Baan(startID);
		aLinks = new RijBaan(startID+1);
		aVoor = new RijBaan(startID+2);
		aRechts = new RijBaan(startID+3);
		fLiVo = new Baan(startID+4);
		fRechts = new Baan(startID+5);
		vRechts = new Baan(startID+6);
	}
	
	public int getBaanPrioriteit(int baanID) {
		switch(baanID) { // Prioriteit geldt alleen voor auto's
			case 0 	: return vLinks.getPriority();
			case 1 	: return aLinks.getPriority() + prioriteit;
			case 2  : return aVoor.getPriority() + prioriteit;
			case 3 	: return aRechts.getPriority() + prioriteit;
			case 4	: return fLiVo.getPriority();
			case 5 	: return fRechts.getPriority();
			case 6	: return vRechts.getPriority();
			default			: {
				System.out.println("!! -1 bij getBaanPrioriteit in Zijde!");
				return -1;
			}
		}
	}
	public void doTrigger(int baanID) {
		switch(baanID) {
			case 0 	: vLinks.doTrigger();break;
			case 1 	: aLinks.voegAutoToe();break;
			case 2  : aVoor.voegAutoToe();break;
			case 3 	: aRechts.voegAutoToe();break;
			case 4	: fLiVo.doTrigger();break;
			case 5 	: fRechts.doTrigger();break;
			case 6	: vRechts.doTrigger();break;
		}
	}

	public void autoVanBaan(int baanID) {
		switch(baanID) {
			case 1 	: aLinks.verwijderAuto();break;
			case 2  : aVoor.verwijderAuto();break;
			case 3 	: aRechts.verwijderAuto();break;
		}
	}

	public void addTurn(int baanID) {
		switch(baanID) {
			case 0 	: vLinks.addTurn();break;
			case 1 	: break;
			case 2  : break;
			case 3 	: break;
			case 4	: fLiVo.addTurn();break;
			case 5 	: fRechts.addTurn();break;
			case 6	: vRechts.addTurn();break;
		}
	}

	public void resetBaan(int baanID) {
		switch(baanID) {
			case 0 	: vLinks.resetTurns();break;
			case 1 	: break;
			case 2  : break;
			case 3 	: break;
			case 4	: fLiVo.resetTurns();break;
			case 5 	: fRechts.resetTurns();break;
			case 6	: vRechts.resetTurns();break;
		}
	}

}
